package org.example.analysis.service.dataobj;

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.example.analysis.model.entity.JavaParameterInfo;

import java.util.List;
import java.util.ArrayList;

/**
 * 参数信息数据对象
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ParameterDataObject extends BaseDataObject {
    /**
     * 所属方法ID
     */
    private Long methodId;
    
    /**
     * 参数名
     */
    private String parameterName;
    
    /**
     * 参数类型
     */
    private String parameterType;
    
    /**
     * 参数注释
     */
    private String comment;
    
    /**
     * 参数注解列表
     */
    private List<String> annotations = new ArrayList<>();
    
    /**
     * 参数修饰符列表
     */
    private List<String> modifiers = new ArrayList<>();
    
    /**
     * 是否是可变参数
     */
    private boolean isVarArgs;
    
    /**
     * 默认值
     */
    private String defaultValue;
    
    /**
     * 参数位置（从0开始）
     */
    private int position;
    private String parameterComment;

    /**
     * 最后修改人
     */
    private String lastModifiedBy;

    /**
     * 转换为JavaParameterInfo对象
     */
    public JavaParameterInfo toJavaParameterInfo() {
        JavaParameterInfo paramInfo = new JavaParameterInfo();
        
        // 基本信息
        paramInfo.setMethodId(methodId)
                .setParameterName(parameterName)
                .setParameterType(parameterType)
                .setParameterComment(comment)
                .setDefaultValue(defaultValue)
                .setPosition(position)
                .setVarArgs(isVarArgs);

        // 列表信息
        paramInfo.setModifiers(modifiers != null ? new ArrayList<>(modifiers) : new ArrayList<>())
                .setAnnotations(annotations != null ? new ArrayList<>(annotations) : new ArrayList<>());

        // 时间和更新信息
        paramInfo.setLastModifiedTime(getLastModifiedTime())
                .setLastModifiedBy(lastModifiedBy)
                .setCreatedAt(getCreatedAt())
                .setRefreshable(getRefreshable());

        return paramInfo;
    }
}